package com.carboy.launch;

import android.content.Context;
import android.os.Bundle;

import com.carboy.launch.R;
import com.carboy.launch.widgets.CustomToast;
import com.iflytek.cloud.ErrorCode;
import com.iflytek.cloud.InitListener;
import com.iflytek.cloud.SpeechConstant;
import com.iflytek.cloud.SpeechError;
import com.iflytek.cloud.SpeechSynthesizer;
import com.iflytek.cloud.SynthesizerListener;

public class TTSController implements SynthesizerListener {
	// 当前上下文
	private Context mContext;
	// 语音合成对象
	private SpeechSynthesizer mTts;
	// 判断是否销毁
	boolean isfinish = true;
	// 单例模式
	private static TTSController ttsManager = null;

	TTSController(Context mContext) {
		this.mContext = mContext;
	}

	public static TTSController getInstance(Context context) {
		if (ttsManager == null) {
			ttsManager = new TTSController(context);
		}
		return ttsManager;
	}

	/**
	 * 初期化监听。
	 */
	private InitListener mTtsInitListener = new InitListener() {
		@Override
		public void onInit(int code) {
			if (code != ErrorCode.SUCCESS) {
				CustomToast.showToast(mContext, "初始化失败,错误码：" + code);
			}
		}
	};

	/**
	 * 设置语音合成参数
	 */
	private void initSpeechSynthesizer() {
		// 设置发音人
		mTts.setParameter(SpeechConstant.VOICE_NAME,
				mContext.getString(R.string.preference_default_tts_role));
		// 设置语速
		mTts.setParameter(SpeechConstant.SPEED,
				"" + mContext.getString(R.string.preference_key_tts_speed));
		// 设置音量
		mTts.setParameter(SpeechConstant.VOLUME,
				"" + mContext.getString(R.string.preference_key_tts_volume));
		// 设置语调
		mTts.setParameter(SpeechConstant.PITCH,
				"" + mContext.getString(R.string.preference_key_tts_pitch));
	}

	/**
	 * 语音合成
	 */
	public void init() {
		// 初始化合成对象.
		if (null == mTts) {
			// 创建合成对象.
			mTts = SpeechSynthesizer.createSynthesizer(mContext,
					mTtsInitListener);
			initSpeechSynthesizer();
		}
	}

	/**
	 * 使用SpeechSynthesizer合成语音，不弹出合成Dialog.
	 */
	public void playText(String playText) {
		if (!isfinish) {
			return;
		}
		this.init();
		// 进行语音合成.
		mTts.startSpeaking(playText, this);
	}

	/**
	 * 暂停语音合成
	 */
	public void stopSpeaking() {
		if (mTts != null) {
			mTts.stopSpeaking();
		}
	}

	/**
	 * 开始语音合成
	 */
	public void startSpeaking() {
		isfinish = true;
	}

	// 缓冲进度回调通知
	@Override
	public void onBufferProgress(int progress, int beginPos, int endPos,
			String info) {
		// progress - 百分比
		// beginPos - 开始位置
		// endPos - 结束位置
		// info - 扩展信息，一般为null
	}

	// 结束回调
	@Override
	public void onCompleted(SpeechError error) {
		// error - 错误类型，获取错误码信息请查看SpeechError 详细错误码请看ErrorCode
		isfinish = true;
	}

	// 合成会话事件 扩展用接口，由具体业务进行约定
	@Override
	public void onEvent(int eventType, int arg1, int arg2, Bundle obj) {
		// eventType - 消息类型
		// arg1 - 参数1
		// arg2 - 参数2
		// obj - 扩展参数
	}

	// 开始播放
	@Override
	public void onSpeakBegin() {
		isfinish = false;
	}

	// 暂停播放
	@Override
	public void onSpeakPaused() {
	}

	// 播放进度
	@Override
	public void onSpeakProgress(int progress, int beginPos, int endPos) {
		// progress - 百分比
		// beginPos - 开始位置
		// endPos - 结束位置
	}

	// 继续播放
	@Override
	public void onSpeakResumed() {
	}

}
